缘起
因为数据库放 VPC 私网网段里了,然后研发有各种直连数据库的需求,其实也有 VPN 方案,但有的研发认为先拨 VPN 不太方便,而我正好认识到 ssm,觉得挺有意思,所以就有了这篇文章的出炉。
其实实际上,都有了 EC2 了,直接上面建账号,几乎所有的 MySQL 的 GUI 客户端,都支持 ssh tunnel 来连数据库,这样就不需要手工命令自己打洞了,MySQL 的 GUI 客户端就一起给你搞定了,这部分还会再水一篇文章。可是,真的值得吗?后话再说。但 ssm plugin 方案比 ssh tunnel 方案更牛逼的一点是:ssm plugin 方案里,EC2 不需要有公网地址!
本地安装 aws-cli 和 Session Manager plugin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
curl \ "https://awscli.amazonaws.com/AWSCLIV2.pkg" \ -o "AWSCLIV2.pkg" sudo installer \ -pkg AWSCLIV2.pkg \ -target /
curl \ "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac_arm64/session-manager-plugin.pkg" \ -o "session-manager-plugin.pkg" sudo installer \ -pkg session-manager-plugin.pkg \ -target / sudo ln \ -s /usr/local/sessionmanagerplugin/bin/session-manager-plugin \ /usr/local/bin/session-manager-plugin
|
如果是Windows环境,可从以下网址下载session-manager-plugin并安装
https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows/SessionManagerPluginSetup.exe
具体使用
场景一:登录服务器
1 2 3 4
| aws \ --profile VFans-test \ ssm start-session \ --target i-0xxxxxxxxxxxxxx7
|
最后成功后显示:
Note: 这种“登录” EC2 服务器跟 ssh 登录 EC2 服务器相比,缺点就是不能上传下载数据。
场景二:打洞到 RDS
1 2 3 4 5 6
| aws \ --profile VFans-test \ ssm start-session \ --target i-0xxxxxxxxxxxxxxx7 \ --document-name AWS-StartPortForwardingSessionToRemoteHost \ --parameters host="192.168.xxx.xxx",portNumber="3306",localPortNumber="5555"
|
成功后显示:
这时候,再开一个控制台,测试如下:
发现本地的 5555 端口是开着的,如果用 MySQL 客户端来连的话,会发现连上的正好是 MySQL。